package com.san.metadata.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import com.san.base.dao.BaseDao;
import com.san.common.utils.Query;
import com.san.metadata.domain.ColumnDTO;
import com.san.metadata.domain.ManageColumnsDO;
import com.san.metadata.domain.ManageTableDO;
import com.san.metadata.domain.TableDTO;
import com.san.metadata.vo.ManageColumnsVO;

/**
 * 管理元数据数据访问接口
 * 
 * @author hulp
 *
 */
@Mapper
public interface ManageMetadataDao extends BaseDao {

	/**
	 * 查询管理元数据表
	 * 
	 * @param query
	 * @return
	 * @throws Exception
	 */
	List<ManageTableDO> list(Query query) throws Exception;

	/**
	 * 获取所有管理元数据表
	 * 
	 * @return
	 * @throws Exception
	 */
	List<TableDTO> listTable() throws Exception;

	/**
	 * 根据数据类型获取所有管理元数据表
	 * 
	 * @param dataType 管理元数据数据类型
	 * @return
	 * @throws Exception
	 */
	List<TableDTO> listTable1(int dataType) throws Exception;

	/**
	 * 根据数据类型集合获取所有管理元数据表
	 * 
	 * @param dataType 管理元数据数据类型集合
	 * @return
	 * @throws Exception
	 */
	List<TableDTO> listTable2(int[] dataType) throws Exception;

	/**
	 * 获取管理元数据表字段
	 * 
	 * @param tableId
	 * @return
	 * @throws Exception
	 */
	List<ColumnDTO> listColumns(Long tableId) throws Exception;

	/**
	 * 查询管理元数据总数
	 * 
	 * @param query
	 * @return
	 * @throws Exception
	 */
	int count(Query query) throws Exception;

	/**
	 * 保存管理元数据
	 * 
	 * @param manageTableDO
	 * @return
	 * @throws Exception
	 */
	int save(ManageTableDO manageTableDO) throws Exception;

	/**
	 * 通过管理元数据表ID获取管理元数据表
	 * 
	 * @param tableId 管理元数据表ID
	 * @return
	 */
	ManageTableDO getById(Long tableId);

	/**
	 * 通过字段ID获取管理元数据字段信息
	 * 
	 * @param columnId 字段ID
	 * @return
	 * @throws Exception
	 */
	ColumnDTO getColumnById(Long columnId) throws Exception;

	/**
	 * 编辑管理元数据
	 * 
	 * @param manageTableDO
	 * @return
	 * @throws Exception
	 */
	int doEdit(ManageTableDO manageTableDO) throws Exception;

	/**
	 * 保存管理元信息字段信息
	 * 
	 * @param manageColumnsVO
	 * @return
	 */
	int saveColumn(ManageColumnsVO manageColumnsVO);

	/**
	 * 删除管理元数据
	 */
	int remove(Long tableId);

	/**
	 * 批量删除管理元数据
	 */
	int batchRemove(Long[] tableIds);

	/**
	 * 获取指定管理元数据表字段
	 * 
	 * @param tableId 管理元数据字段ID
	 * @return
	 * @throws Exception
	 */
	List<ManageColumnsDO> allManageColumns(Long tableId) throws Exception;

	/**
	 * 批量更新管理元数据字段信息
	 * 
	 * @param manageColumnsVOList 管理元数据字段信息List
	 * @return
	 */
	int batchColumnsUpdate(List<ManageColumnsVO> manageColumnsVOList);

	/**
	 * 通过管理元数据字段ID获取字段信息
	 * 
	 * @param columnIds 管理元数据字段ID集合
	 * @return
	 */
	List<String> listColumnByIds(String columnIds);

	/**
	 * 通过管理元数据表名称获取表信息
	 * @param name 管理元数据表名称
	 * @return
	 */
	ManageTableDO getByName(String name);

}
